`ifndef JZ4785_FXU_MUL_VH_FILE
`define JZ4785_FXU_MUL_VH_FILE

//============================================================
`define JZ4785_UMUL           12    //ucode  width

//INSN_TYPE(4),DATA_FMT(4),MADD(2),(2)

//ucode[11:8]
//INSN_TYPE
`define JZ4785_MUL_FMU	4'b1000
`define JZ4785_MUL_IMU	4'b0100
`define JZ4785_MUL_QMU	4'b0010
`define JZ4785_MUL_FPU	4'b0001
//ucode[7:4]
//DATA_FMT
`define	JZ4785_MUL_DF_B	 4'b0001
`define	JZ4785_MUL_DF_H	 4'b0010
`define	JZ4785_MUL_DF_W	 4'b0100
`define	JZ4785_MUL_DF_D	 4'b1000
`define	JZ4785_MUL_DF_S	 4'b0100
`define JZ4785_MUL_DF_PS 4'b0010

//ucode[3:2]
//pure-mul, madd
`define JZ4785_MUL_PMUL	2'b00
`define JZ4785_MUL_MADD	2'b01
`define JZ4785_MUL_MSUB	2'b10

//ucode[1]
//for iu:dotp or not
//for qu:round or not
//for fpu:get not then mul
`define JZ4785_MUL_DOTP	  1'b1
`define JZ4785_MUL_NDOTP  1'b0
`define JZ4785_MUL_RND    1'b1
`define JZ4785_MUL_NRND	  1'b0
`define JZ4785_MUL_GNOT   1'b1
`define JZ4785_MUL_NGNOT  1'b0

//ucode[0]
//sign or not for iu,
//sat or not for qu.
`define JZ4785_MUL_SIGN  1'b1
`define JZ4785_MUL_USIGN 1'b0
`define JZ4785_MUL_SAT   1'b1
`define JZ4785_MUL_USAT	 1'b0

//FMU, IMU, QMU, FPU

`define JZ4785_UMUL_FMADD_W    { `JZ4785_MUL_FMU, `JZ4785_MUL_DF_W, `JZ4785_MUL_MADD, `JZ4785_MUL_NDOTP, `JZ4785_MUL_USIGN}
`define JZ4785_UMUL_FMADD_D    { `JZ4785_MUL_FMU, `JZ4785_MUL_DF_D, `JZ4785_MUL_MADD, `JZ4785_MUL_NDOTP, `JZ4785_MUL_USIGN}
`define JZ4785_UMUL_FMSUB_W    { `JZ4785_MUL_FMU, `JZ4785_MUL_DF_W, `JZ4785_MUL_MSUB, `JZ4785_MUL_NDOTP, `JZ4785_MUL_USIGN}
`define JZ4785_UMUL_FMSUB_D    { `JZ4785_MUL_FMU, `JZ4785_MUL_DF_D, `JZ4785_MUL_MSUB, `JZ4785_MUL_NDOTP, `JZ4785_MUL_USIGN}
`define JZ4785_UMUL_FMUL_W     { `JZ4785_MUL_FMU, `JZ4785_MUL_DF_W, `JZ4785_MUL_PMUL, `JZ4785_MUL_NDOTP, `JZ4785_MUL_USIGN}
`define JZ4785_UMUL_FMUL_D     { `JZ4785_MUL_FMU, `JZ4785_MUL_DF_D, `JZ4785_MUL_PMUL, `JZ4785_MUL_NDOTP, `JZ4785_MUL_USIGN}

`define JZ4785_UMUL_DOTP_S_H   { `JZ4785_MUL_IMU, `JZ4785_MUL_DF_H, `JZ4785_MUL_PMUL, `JZ4785_MUL_DOTP , `JZ4785_MUL_SIGN }
`define JZ4785_UMUL_DOTP_S_W   { `JZ4785_MUL_IMU, `JZ4785_MUL_DF_W, `JZ4785_MUL_PMUL, `JZ4785_MUL_DOTP , `JZ4785_MUL_SIGN }
`define JZ4785_UMUL_DOTP_S_D   { `JZ4785_MUL_IMU, `JZ4785_MUL_DF_D, `JZ4785_MUL_PMUL, `JZ4785_MUL_DOTP , `JZ4785_MUL_SIGN }
`define JZ4785_UMUL_DOTP_U_H   { `JZ4785_MUL_IMU, `JZ4785_MUL_DF_H, `JZ4785_MUL_PMUL, `JZ4785_MUL_DOTP , `JZ4785_MUL_USIGN}
`define JZ4785_UMUL_DOTP_U_W   { `JZ4785_MUL_IMU, `JZ4785_MUL_DF_W, `JZ4785_MUL_PMUL, `JZ4785_MUL_DOTP , `JZ4785_MUL_USIGN}
`define JZ4785_UMUL_DOTP_U_D   { `JZ4785_MUL_IMU, `JZ4785_MUL_DF_D, `JZ4785_MUL_PMUL, `JZ4785_MUL_DOTP , `JZ4785_MUL_USIGN}
`define JZ4785_UMUL_DPADD_S_H  { `JZ4785_MUL_IMU, `JZ4785_MUL_DF_H, `JZ4785_MUL_MADD, `JZ4785_MUL_DOTP , `JZ4785_MUL_SIGN } 
`define JZ4785_UMUL_DPADD_S_W  { `JZ4785_MUL_IMU, `JZ4785_MUL_DF_W, `JZ4785_MUL_MADD, `JZ4785_MUL_DOTP , `JZ4785_MUL_SIGN } 
`define JZ4785_UMUL_DPADD_S_D  { `JZ4785_MUL_IMU, `JZ4785_MUL_DF_D, `JZ4785_MUL_MADD, `JZ4785_MUL_DOTP , `JZ4785_MUL_SIGN } 
`define JZ4785_UMUL_DPADD_U_H  { `JZ4785_MUL_IMU, `JZ4785_MUL_DF_H, `JZ4785_MUL_MADD, `JZ4785_MUL_DOTP , `JZ4785_MUL_USIGN}
`define JZ4785_UMUL_DPADD_U_W  { `JZ4785_MUL_IMU, `JZ4785_MUL_DF_W, `JZ4785_MUL_MADD, `JZ4785_MUL_DOTP , `JZ4785_MUL_USIGN}
`define JZ4785_UMUL_DPADD_U_D  { `JZ4785_MUL_IMU, `JZ4785_MUL_DF_D, `JZ4785_MUL_MADD, `JZ4785_MUL_DOTP , `JZ4785_MUL_USIGN}
`define JZ4785_UMUL_DPSUB_S_H  { `JZ4785_MUL_IMU, `JZ4785_MUL_DF_H, `JZ4785_MUL_MSUB, `JZ4785_MUL_DOTP , `JZ4785_MUL_SIGN } 
`define JZ4785_UMUL_DPSUB_S_W  { `JZ4785_MUL_IMU, `JZ4785_MUL_DF_W, `JZ4785_MUL_MSUB, `JZ4785_MUL_DOTP , `JZ4785_MUL_SIGN } 
`define JZ4785_UMUL_DPSUB_S_D  { `JZ4785_MUL_IMU, `JZ4785_MUL_DF_D, `JZ4785_MUL_MSUB, `JZ4785_MUL_DOTP , `JZ4785_MUL_SIGN } 
`define JZ4785_UMUL_DPSUB_U_H  { `JZ4785_MUL_IMU, `JZ4785_MUL_DF_H, `JZ4785_MUL_MSUB, `JZ4785_MUL_DOTP , `JZ4785_MUL_USIGN}
`define JZ4785_UMUL_DPSUB_U_W  { `JZ4785_MUL_IMU, `JZ4785_MUL_DF_W, `JZ4785_MUL_MSUB, `JZ4785_MUL_DOTP , `JZ4785_MUL_USIGN}
`define JZ4785_UMUL_DPSUB_U_D  { `JZ4785_MUL_IMU, `JZ4785_MUL_DF_D, `JZ4785_MUL_MSUB, `JZ4785_MUL_DOTP , `JZ4785_MUL_USIGN}
`define JZ4785_UMUL_MADDV_B    { `JZ4785_MUL_IMU, `JZ4785_MUL_DF_B, `JZ4785_MUL_MADD, `JZ4785_MUL_NDOTP, `JZ4785_MUL_SIGN}
`define JZ4785_UMUL_MADDV_H    { `JZ4785_MUL_IMU, `JZ4785_MUL_DF_H, `JZ4785_MUL_MADD, `JZ4785_MUL_NDOTP, `JZ4785_MUL_SIGN}
`define JZ4785_UMUL_MADDV_W    { `JZ4785_MUL_IMU, `JZ4785_MUL_DF_W, `JZ4785_MUL_MADD, `JZ4785_MUL_NDOTP, `JZ4785_MUL_SIGN}
`define JZ4785_UMUL_MADDV_D    { `JZ4785_MUL_IMU, `JZ4785_MUL_DF_D, `JZ4785_MUL_MADD, `JZ4785_MUL_NDOTP, `JZ4785_MUL_SIGN}
`define JZ4785_UMUL_MSUBV_B    { `JZ4785_MUL_IMU, `JZ4785_MUL_DF_B, `JZ4785_MUL_MSUB, `JZ4785_MUL_NDOTP, `JZ4785_MUL_SIGN}
`define JZ4785_UMUL_MSUBV_H    { `JZ4785_MUL_IMU, `JZ4785_MUL_DF_H, `JZ4785_MUL_MSUB, `JZ4785_MUL_NDOTP, `JZ4785_MUL_SIGN}
`define JZ4785_UMUL_MSUBV_W    { `JZ4785_MUL_IMU, `JZ4785_MUL_DF_W, `JZ4785_MUL_MSUB, `JZ4785_MUL_NDOTP, `JZ4785_MUL_SIGN}
`define JZ4785_UMUL_MSUBV_D    { `JZ4785_MUL_IMU, `JZ4785_MUL_DF_D, `JZ4785_MUL_MSUB, `JZ4785_MUL_NDOTP, `JZ4785_MUL_SIGN}
`define JZ4785_UMUL_MULV_B     { `JZ4785_MUL_IMU, `JZ4785_MUL_DF_B, `JZ4785_MUL_PMUL, `JZ4785_MUL_NDOTP, `JZ4785_MUL_SIGN}
`define JZ4785_UMUL_MULV_H     { `JZ4785_MUL_IMU, `JZ4785_MUL_DF_H, `JZ4785_MUL_PMUL, `JZ4785_MUL_NDOTP, `JZ4785_MUL_SIGN}
`define JZ4785_UMUL_MULV_W     { `JZ4785_MUL_IMU, `JZ4785_MUL_DF_W, `JZ4785_MUL_PMUL, `JZ4785_MUL_NDOTP, `JZ4785_MUL_SIGN}
`define JZ4785_UMUL_MULV_D     { `JZ4785_MUL_IMU, `JZ4785_MUL_DF_D, `JZ4785_MUL_PMUL, `JZ4785_MUL_NDOTP, `JZ4785_MUL_SIGN}

`define JZ4785_UMUL_MUL_Q_H    { `JZ4785_MUL_QMU, `JZ4785_MUL_DF_H, `JZ4785_MUL_PMUL, `JZ4785_MUL_NRND,`JZ4785_MUL_USAT}
`define JZ4785_UMUL_MUL_Q_W    { `JZ4785_MUL_QMU, `JZ4785_MUL_DF_W, `JZ4785_MUL_PMUL, `JZ4785_MUL_NRND,`JZ4785_MUL_USAT}
`define JZ4785_UMUL_MULR_Q_H   { `JZ4785_MUL_QMU, `JZ4785_MUL_DF_H, `JZ4785_MUL_PMUL, `JZ4785_MUL_RND, `JZ4785_MUL_USAT} 
`define JZ4785_UMUL_MULR_Q_W   { `JZ4785_MUL_QMU, `JZ4785_MUL_DF_W, `JZ4785_MUL_PMUL, `JZ4785_MUL_RND, `JZ4785_MUL_USAT} 
`define JZ4785_UMUL_MADD_Q_H   { `JZ4785_MUL_QMU, `JZ4785_MUL_DF_H, `JZ4785_MUL_MADD, `JZ4785_MUL_NRND,`JZ4785_MUL_SAT }
`define JZ4785_UMUL_MADD_Q_W   { `JZ4785_MUL_QMU, `JZ4785_MUL_DF_W, `JZ4785_MUL_MADD, `JZ4785_MUL_NRND,`JZ4785_MUL_SAT }
`define JZ4785_UMUL_MADDR_Q_H  { `JZ4785_MUL_QMU, `JZ4785_MUL_DF_H, `JZ4785_MUL_MADD, `JZ4785_MUL_RND, `JZ4785_MUL_SAT }
`define JZ4785_UMUL_MADDR_Q_W  { `JZ4785_MUL_QMU, `JZ4785_MUL_DF_W, `JZ4785_MUL_MADD, `JZ4785_MUL_RND, `JZ4785_MUL_SAT }
`define JZ4785_UMUL_MSUB_Q_H   { `JZ4785_MUL_QMU, `JZ4785_MUL_DF_H, `JZ4785_MUL_MSUB, `JZ4785_MUL_NRND,`JZ4785_MUL_SAT }
`define JZ4785_UMUL_MSUB_Q_W   { `JZ4785_MUL_QMU, `JZ4785_MUL_DF_W, `JZ4785_MUL_MSUB, `JZ4785_MUL_NRND,`JZ4785_MUL_SAT }
`define JZ4785_UMUL_MSUBR_Q_H  { `JZ4785_MUL_QMU, `JZ4785_MUL_DF_H, `JZ4785_MUL_MSUB, `JZ4785_MUL_RND, `JZ4785_MUL_SAT }
`define JZ4785_UMUL_MSUBR_Q_W  { `JZ4785_MUL_QMU, `JZ4785_MUL_DF_W, `JZ4785_MUL_MSUB, `JZ4785_MUL_RND, `JZ4785_MUL_SAT }

`define JZ4785_UMUL_MUL_S      { `JZ4785_MUL_FPU, `JZ4785_MUL_DF_S, `JZ4785_MUL_PMUL, `JZ4785_MUL_NGNOT, `JZ4785_MUL_USIGN}
`define JZ4785_UMUL_MUL_D      { `JZ4785_MUL_FPU, `JZ4785_MUL_DF_D, `JZ4785_MUL_PMUL, `JZ4785_MUL_NGNOT, `JZ4785_MUL_USIGN}
`define JZ4785_UMUL_MUL_PS     { `JZ4785_MUL_FPU, `JZ4785_MUL_DF_PS,`JZ4785_MUL_PMUL, `JZ4785_MUL_NGNOT, `JZ4785_MUL_USIGN}
`define JZ4785_UMUL_MADD_S     { `JZ4785_MUL_FPU, `JZ4785_MUL_DF_S, `JZ4785_MUL_MADD, `JZ4785_MUL_NGNOT, `JZ4785_MUL_USIGN}
`define JZ4785_UMUL_MADD_D     { `JZ4785_MUL_FPU, `JZ4785_MUL_DF_D, `JZ4785_MUL_MADD, `JZ4785_MUL_NGNOT, `JZ4785_MUL_USIGN}
`define JZ4785_UMUL_MADD_PS    { `JZ4785_MUL_FPU, `JZ4785_MUL_DF_PS,`JZ4785_MUL_MADD, `JZ4785_MUL_NGNOT, `JZ4785_MUL_USIGN}
`define JZ4785_UMUL_MSUB_S     { `JZ4785_MUL_FPU, `JZ4785_MUL_DF_S, `JZ4785_MUL_MSUB, `JZ4785_MUL_NGNOT, `JZ4785_MUL_USIGN}
`define JZ4785_UMUL_MSUB_D     { `JZ4785_MUL_FPU, `JZ4785_MUL_DF_D, `JZ4785_MUL_MSUB, `JZ4785_MUL_NGNOT, `JZ4785_MUL_USIGN}
`define JZ4785_UMUL_MSUB_PS    { `JZ4785_MUL_FPU, `JZ4785_MUL_DF_PS,`JZ4785_MUL_MSUB, `JZ4785_MUL_NGNOT, `JZ4785_MUL_USIGN}
`define JZ4785_UMUL_NMADD_S    { `JZ4785_MUL_FPU, `JZ4785_MUL_DF_S, `JZ4785_MUL_MADD, `JZ4785_MUL_GNOT , `JZ4785_MUL_USIGN} 
`define JZ4785_UMUL_NMADD_D    { `JZ4785_MUL_FPU, `JZ4785_MUL_DF_D, `JZ4785_MUL_MADD, `JZ4785_MUL_GNOT , `JZ4785_MUL_USIGN} 
`define JZ4785_UMUL_NMADD_PS   { `JZ4785_MUL_FPU, `JZ4785_MUL_DF_PS,`JZ4785_MUL_MADD, `JZ4785_MUL_GNOT , `JZ4785_MUL_USIGN}
`define JZ4785_UMUL_NMSUB_S    { `JZ4785_MUL_FPU, `JZ4785_MUL_DF_S, `JZ4785_MUL_MSUB, `JZ4785_MUL_GNOT , `JZ4785_MUL_USIGN} 
`define JZ4785_UMUL_NMSUB_D    { `JZ4785_MUL_FPU, `JZ4785_MUL_DF_D, `JZ4785_MUL_MSUB, `JZ4785_MUL_GNOT , `JZ4785_MUL_USIGN} 
`define JZ4785_UMUL_NMSUB_PS   { `JZ4785_MUL_FPU, `JZ4785_MUL_DF_PS,`JZ4785_MUL_MSUB, `JZ4785_MUL_GNOT , `JZ4785_MUL_USIGN}

`endif
